package com.wxh.dao.split;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @ClassName: DynamicDataSourceHolder
 * @Description: 动态数据源持有者
 * @Author wxh
 * @Date: 2019/12/6 14:22
 * @Version V1.0.0
 * @Since 1.8
 */
public class DynamicDataSourceHolder {
    private static Logger logger = LoggerFactory.getLogger(DynamicDataSourceHolder.class);
    /**
     * ThreadLocal 适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用，
     * 也即变量在线程间隔离而在方法或类间共享的场景
     */
    private static ThreadLocal<String> contextHolder = new ThreadLocal<>();
    public static final String DB_MASTER = "master";
    public static final String DB_SLAVE="slave";

    /**
     *  获取线程的数据源类型：master还是slave
     * @return String
     */
    public static String getDbType() {
        String db = contextHolder.get();
        if(db == null) {
            db = "master";
        }
        return db;
    }

    /**
     * 设置线程间数据源类型
     * @param str
     */
    public static void setDbType(String str) {
        logger.info("所使用的数据源为:"+str);
        contextHolder.set(str);
    }

    /**
     *  清理数据源类型
     */
    public static void clearDbType() {
        contextHolder.remove();
    }
}
